home *** CD-ROM | disk | FTP | other *** search
- /*
- DblBuf
-
- A demo of rtg.library
-
- Written by Hans-Jörg & Thomas Frieden
- Schlossstr. 176
- 54293 Trier
- tfrieden@fax.uni-trier.de
- hfrieden@fix.uni-trier.de
-
- */
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <dos/dos.h>
- #include <rtgmaster/rtgmaster.h>
- #include <rtgmaster/rtgsublibs.h>
- #include <utility/tagitem.h>
- #include <clib/exec_protos.h>
- #include <clib/rtgmaster_protos.h>
- #include <clib/dos_protos.h>
- #include <pragmas/exec_pragmas.h>
- #include <pragmas/rtgmaster_pragmas.h>
- #include <pragmas/dos_pragmas.h>
-
- struct RtgScreen *RtgScreen;
- struct ScreenReq *sr;
- struct RTGMasterBase *RTGMasterBase;
- extern struct DOSBase *DOSBase;
-
- ULONG cmap[800];
-
- struct TagItem rtag[] = {
- //smr_MinWidth, 320,
- //smr_MinHeight, 240,
- //smr_MaxWidth, 640,
- //smr_MaxHeight, 480,
- smr_ChunkySupport, -1,
- smr_PlanarSupport, -1,
- //smr_Buffers, 1,
- TAG_DONE, NULL
- };
-
- struct TagItem gtag[] = {
- grd_BytesPerRow, 0,
- grd_Width, 0,
- grd_Height, 0,
- grd_Depth, 0,
- grd_PixelLayout, 0,
- grd_ColorSpace, 0,
- grd_PlaneSize, 0,
- TAG_DONE, 0
- };
-
- struct TagItem tacks[] = {
- rtg_Buffers, 2,
- TAG_DONE, 0
- };
-
- void main(int argc, char **argv) {
- /*
- * Since this is a demo, I don't check anything at all
- * and simply assume that every open went ok... 8-)
- */
- int i, x, y;
- UBYTE *adr;
- ULONG size;
-
- RTGMasterBase = (struct RTGMasterBase *)OpenLibrary((STRPTR)"rtgmaster.library", 0);
-
- sr = RtgScreenModeReq(rtag);
-
- if (sr==NULL) {
- CloseLibrary((struct Library *)RTGMasterBase);
- exit(0L);
- }
-
- RtgScreen = OpenRtgScreen(sr, tacks);
-
- GetRtgScreenData(RtgScreen, gtag);
-
- size = gtag[0].ti_Data;
-
- printf("Screen is %ld x %ld x %ld\n", gtag[1].ti_Data, gtag[2].ti_Data, gtag[3].ti_Data);
- printf("It has %ld bytes per row", size);
- if (size>gtag[1].ti_Data) {
- printf(", which means that the screen is wider than what you see\n");
- } else printf("\n");
-
- cmap[0] = 0x01000000;
- x = 1;
- for (i = 0; i < 256; i++) {
- cmap[x++] = i * 0x1111111;
- cmap[x++] = i * 0x1111111;
- cmap[x++] = i * 0x1111111;
- }
- cmap[x++]=0;
-
-
- if (RtgScreen) {
- LockRtgScreen(RtgScreen);
-
- adr=(UBYTE *)GetBufAdr(RtgScreen, 0);
-
- for (y=0; y<30; y++) {
- for (x=0; x<size/2; x++) {
- *(adr+x)=45;
- }
- adr+=size;
- }
-
- adr=(UBYTE *)GetBufAdr(RtgScreen, 1)/*+10*size*/;
-
- for (y=0; y<30; y++) {
- for (x=0; x<size/2; x++) {
- *(adr+x)=255;
- }
- adr+=size;
- }
-
-
- LoadRGBRtg(RtgScreen, (APTR) cmap);
- x=1;
- for (i=30; i>0; i--) {
- Delay(i);
- if (x==0) x=1; else x=0;
- SwitchScreens(RtgScreen, (ULONG)x);
- }
- for (i=30; i>0; i--) {
- Delay(1);
- if (x==0) x=1; else x=0;
- SwitchScreens(RtgScreen, (ULONG)x);
- }
-
- UnlockRtgScreen(RtgScreen);
- CloseRtgScreen(RtgScreen);
- }
- CloseLibrary((struct Library *)RTGMasterBase);
- }
-